/* eslint-disable */
import utilVuex from './utilVuex.js'

//添加前必须设置工作台仓库的视图标识列表
const warehouseRequireViewkeyList= [
  'dept_apply',  //科室->科室请领->请领需求
  'dept_demand',  //科室->科室需求->需求计划
  'dept_use',  //科室->科室消耗->科室消耗单
  'dept_oprt_use',  //科室->病人消耗->病人消耗单
]


//添加前所选仓库必须是中心仓库的视图标识列表
const warehouseCenterRequireViewkeyList= [
  'wm_out_order',  //仓库->出入库->供应商出库
  'dept_return',  //仓库->出入库->科室退货入库
]

//添加前必须设置工作台请领仓库的视图标识列表
const applyWarehouseRequireViewkeyList= [
  'dept_apply',  //科室->科室请领->请领需求
  'dept_demand',  //科室->科室需求->需求计划
]


//dataview 必须显示的查询条件
const sortUserQueryRequire= [
  'busKey',
  'busDate',
  'deptName',
  'warehouseName',
  'busUser',
  'remark',

  //科室消耗
  'useKey',
  'useDate',

  //手术备货申请
  'oprtApplyKey',
  'oprtApplyUser',
  'oprtApplyDate',

  //跟台手术备货
  'prepareKey',
  'prepareDate',

  //跟台手术清点
  'checkKey',
  'checkDate',
]

//dataview 查询条件排序
const sortUserQueryMap= {
  busKey: 100,              //单号
  useKey: 100,              //单号：科室消耗模块
  oprtApplyKey: 100,        //单号：备货申请
  prepareKey: 100,          //单号：跟台手术备货
  checkKey: 100,            //单号：跟台手术清点

  refKey: 102,              //关联单号
  applyKey: 104,            //关联请领单号
  asnKey: 104,              //关联请领单号

  busDate: 110,             //业务日期
  useDate: 110,             //业务日期：科室消耗单模块
  oprtApplyDate: 110,       //业务日期：备货申请
  prepareDate: 110,         //业务日期：跟台手术备货
  checkDate:  110,          //业务日期：跟台手术清点

  deptName: 120,            //业务科室
  warehouseName: 130,       //业务仓库
  applyWarehouseName: 132,  //申请仓库
  fromWarehouseName: 134,   //业务仓库
  toWarehouseName: 136,     //业务仓库

  busUser: 140,             //业务操作人
  oprtApplyUser: 140,       //业务操作人:备货申请
  userName: 140,            //业务操作人：病人消耗模块

  creator: 200,             //创建人
  gmtCreate: 210,           //创建时间
  modifier: 220,            //修改人
  gmtModified: 230,         //修改时间

  flowStatus: 300,          //流程状态
  flowModified: 330,        //流程修改时间
  flowModifier: 340,        //流程修改人
  flowCloseRemark: 350,      //流程作废备注
}

//dataview 宽度
const columnWidthMap= {
  busKey: 110,              //单号
  useKey: 110,              //单号：病人消耗模块
  oprtApplyKey: 110,        //单号：备货申请

  refKey: 110,              //关联单号
  applyKey: 110,            //关联请领单号
  asnKey: 110,            //关联请领单号

  busDate: 110,             //业务日期
  useDate: 110,             //业务日期：科室消耗单模块
  oprtApplyDate: 110,       //业务日期：备货申请

  deptName: 120,            //业务科室
  warehouseName: 120,       //业务仓库
  applyWarehouseName: 120,  //申请仓库
  fromWarehouseName: 120,   //业务仓库
  toWarehouseName: 120,     //业务仓库

  busUser: 120,             //业务操作人
  oprtApplyUser: 120,       //业务操作人:备货申请
  userName: 120,            //业务操作人：病人消耗模块


  flowModifier: 80,          //流程处理人
  flowStatus: 100,          //流程状态
  flowModified: 140,        //流程修改时间


  creator: 120,          //创建人
  gmtCreate: 140,        //创建时间
  modifier: 120,         //修改人
  gmtModified: 140,      //修改时间
}

/**
 * Dataview 相关工具类
 */
const utilDataview = {
  //dataview 工具栏按钮操作前
  toolbarButtonClickBefore(that,button){
    //当前用户
    let currentUser = that.utils.getCurrentUser()
    //当前所设置工作台信息
    let currentWarehouse = that.utils.getCurrentWarehouse()

    let viewKey = that.propViewKey || that.viewKey
    if (!viewKey) return true
    if (!button) return true

    switch (button.code) {
      case 'vb-add': //点击添加前
        //当前仓库必须有
        if (warehouseRequireViewkeyList.includes(viewKey) && !this.checkWarehouse(that)){
          return false
        }

        //当前用户科室必须业务科室   deptFlagBus
        console.log('that.utils.getCurrentWarehouse()', that.utils.getCurrentUser())
        //当前仓库必须是中心仓库
        if (warehouseCenterRequireViewkeyList.includes(viewKey) && !this.checkWarehouse(that, true)){
          return false
        }

        //请领仓库
        if (applyWarehouseRequireViewkeyList.includes(viewKey) ){
          if (that.strings.isBlank(currentWarehouse.applyWarehouseId)) {
            that.utilMessage.warning('请先到工作台设置好[请领仓库]，再进行操作', 3000)
            return false
          }
          if (currentWarehouse.applyWarehouseId == currentWarehouse.warehouseId) {
            that.utilMessage.warning(`当前仓库[${currentWarehouse.warehouseName}]与请领仓库[${currentWarehouse.applyWarehouseName}]是一样的，请联系运营人员进行修改`, 3000)
            return false
          }
        }
        break
    }
    return true
  },

  /** 检查仓库设置
   * @param that
   * @param isCenter true：所设置的必须是中心仓库
   //工作台所选的仓库必须是中心仓库
   if (!this.utilDataview.checkWarehouse(this, true)) return
   */
  checkWarehouse(that,isCenter) {
    let currentWarehouse = that.utils.getCurrentWarehouse()
    if (that.strings.isBlank(currentWarehouse.warehouseId)){
      that.utilMessage.warning('请先到工作台设置好[当前仓库]，再进行操作', 3000)
      return false
    }
    if (isCenter == true && !currentWarehouse.flagCenter) {
      that.utilMessage.warning(`工作台所设置仓库[${currentWarehouse.warehouseName}]不是中心仓库，请联系运营进行配置`, 3000)
      return false
    }
    return true
  },

  /**  dataview 默认配置（排除掉： 数据视图自己的，没有流程状态或者没有业务单号的，表名称包含item的，数据视图不使用默认配置配置为true的）
   *  列表字段显示：         sortUserQueryRequire 内的字段必须显示
   *  列表字段宽度：         columnWidthMap 所定义的字段宽度
   *          当最后一列宽度可用宽度不够200的话则固定200，否则为auto
   *          日期类： 年月日固定宽度100，其他140
   *          最后一列优先级： remark字段，包含remark的字段，列表的最后一列
   *  列表字段查询区域排序： sortUserQueryMap  所定义的字段排序
   *          流程状态字段不显示为查询区域条件
   */
  getColumns(that,columns) {
    if (!columns || columns.length < 1) return []
    //有耗材规格得数据，后面都添加上耗材型号字段
    if(global.utils.getBooleanParam('show_matr_model', false) && that.formConfig && that.formConfig.viewType != 'import'){
      let modelColumn
      let matrModelColumn
      let isMatrModelAdd = true
      let isModelAdd = true
      columns.forEach(col=>{
        if(col.name == 'matrModel') isMatrModelAdd = false
        if(col.name == 'model') isModelAdd = false
        if(col.name == 'matrSpec'){//耗材规格
          matrModelColumn = Object.assign({}, col)
          matrModelColumn.name = 'matrModel'
          matrModelColumn.title = '耗材型号'
        }
        if(col.name == 'spec'){//耗材规格
          modelColumn = Object.assign({}, col)
          modelColumn.name = 'model'
          modelColumn.title = '型号'
        }
      })

      if(isMatrModelAdd&&matrModelColumn) columns.push(matrModelColumn)
      if(isModelAdd&&modelColumn) columns.push(modelColumn)
    }

    //排除掉： 数据视图自己的，没有流程状态或者没有业务单号的，表名称包含item的，数据视图不使用默认配置配置为true的
    if (
      (that.propViewKey && that.propViewKey == 'system_dv_define')
      ||
      columns.findIndex(column => column.name =='flowStatus' || column.name =='busKey') == -1
      ||
      (that.baseTable && that.baseTable.indexOf('item') == -1)
      ||
      (that.formConfig && that.formConfig.flagColumnsDefaultConfig && (that.formConfig.flagColumnsDefaultConfig == true || that.formConfig.flagColumnsDefaultConfig == 1))
    ) {
      return columns.sort((o1, o2) => global.strings.defaultString(o1.sort,999) - global.strings.defaultString(o2.sort,999))
    }



    //自动宽度的字段
    let autoColumnIndex = columns.findIndex(column => !column.hidden && column.name.toLowerCase().indexOf('remark') != -1)
    if (autoColumnIndex == -1) { //没有显示任何备注类字段
      autoColumnIndex = columns.findIndex(column => column.name == 'remark')
      if (autoColumnIndex == -1) { //默认备注字段没有
        autoColumnIndex = columns.findIndex(column => column.name.toLowerCase().indexOf('remark') != -1)
      }
    }
    if (autoColumnIndex != -1 )that.$set(columns[autoColumnIndex], 'hidden', true)

    //流程字段不做列表查询
    let flowStatusIndex = columns.findIndex(column => column.name =='flowStatus')
    if (flowStatusIndex != -1)  that.$set(columns[flowStatusIndex], 'queryType', 'none')

    let showLast = 0
    let columnWidthAll = 0
    //是否已经有日期字段显示了
    let haveDate = columns.findIndex(column => !column.hidden && (column.name =='gmtCreate' || column.name =='gmtModified'))
    for(let i =0 ;  i < columns.length ;i++) {
      //排序
      if (columns[i].queryType != 'none' ||  (!columns[i].hidden && sortUserQueryRequire.includes(columns[i].name))) {
        that.$set(columns[i], 'sortQuery', sortUserQueryMap[columns[i].name])
        if (columns[i].name.toLowerCase().indexOf('date') != -1) {
          if (haveDate != -1) {
            that.$set(columns[i], 'queryType', 'dateArea')
          }
        }
        if (columns[i].name.toLowerCase().indexOf('date') != -1) that.$set(columns[i], 'hidden', false)

        if (global.strings.isBlank(columns[i].queryType) || columns[i].queryType == 'none') {
          //that.$set(columns[i], 'queryType', 'text')
        }
      }
      if (!columns[i].sortQuery && columns[i].sortQuery != 'auto') that.$set(columns[i], 'sortQuery', 800)

      //字段宽度
      if (!columns[i].hidden ) {
        showLast = i
        if (columnWidthMap[columns[i].name]) {
          that.$set(columns[i], 'columnWidth', columnWidthMap[columns[i].name])
        }else {
          that.$set(columns[i], 'columnWidth', isNaN(columns[i].width) ? columns[i].width : 120)
        }

        if (columns[i].name.toLowerCase().indexOf('date') != -1 && columnWidthMap[columns[i].name])  {
          if (columns[i].datePattern == 'yyyy-MM-dd') {
            that.$set(columns[i], 'columnWidth', 100)
          }else {
            that.$set(columns[i], 'columnWidth', 140)
          }
        }
        columnWidthAll+=Number(columns[i].width)
      }
    }
    let tbMain = that.$refs.tbMain ? $(that.$refs.tbMain.$el) : null
    if (autoColumnIndex != -1) {
      //将备注列移动到数组的最后
      columns.splice(columns.length, 0, columns.splice(autoColumnIndex, 1)[0])
      autoColumnIndex = columns.length -1

      //如果该字段全部是英文
      if (global.strings.isAllEn(columns[autoColumnIndex].title)) that.$set(columns[autoColumnIndex], 'title', '备注')

      //备注字段没有查询类型
      if (global.strings.isBlank(columns[autoColumnIndex].queryType) || columns[autoColumnIndex].queryType == 'none') {
        // that.$set(columns[autoColumnIndex], 'queryType', 'text')
      }

      if (tbMain == null) {
        that.$set(columns[autoColumnIndex], 'columnWidth', 'auto')
      } else if (tbMain.width() - columnWidthAll >=200) { //最后一列可用宽度大于150的时候，使用自动宽度，不会出现横向滚动条
        that.$set(columns[autoColumnIndex], 'columnWidth', 'auto')
      }else {
        that.$set(columns[autoColumnIndex], 'columnWidth', 200)
      }
      that.$set(columns[autoColumnIndex], 'hidden', false)
    }else {
      that.$set(columns[showLast], 'columnWidth', 'auto')
    }
    return columns
  },

  /** 数据筛选类型 过滤
   */
  getDataFilterTypeSource(viewKey, typeVlaue) {
    if (!typeVlaue || !viewKey) return true

    //科室请领需求
    if (viewKey == 'dept_apply'){
      if (['warehouseId', 'warehouseDeptId', 'fromWarehouseId'].includes(typeVlaue)) return false
    }
    return true
  },
  //保存前的通用校验
  beforeSave(that,form){
    let viewKey = that.propViewKey || that.viewKey
    if ('base_dept' != viewKey &&  form.deptId && !utilVuex.isBusDept(form.deptId)){
      that.utilMessage.warning('所选科室非业务科室，请重新选择或者联系管理员更改科室属性', 3000)
      return false
    }
    return true
  },
  //校验日期控件
  validFortenVxeDate(viewKey, fieldName, value){
    if (fieldName == 'expDate' && global.dates.isOverdue(value)){
      return '效期要大于当前日期'
    }
    return null
  },
  //是否追加默认日期查询
  isAddDateFirst(viewKey){
    if (!viewKey) {
      return false
    }
    return viewKey.indexOf('stock') == -1 && viewKey.indexOf('oprt_use_item_select') == -1
  },

}

export default utilDataview
